#include "head.h"

//这个.c文件用于实现断点续传函数的功能：


//断点续传函数：

//fileSize表示之前传输过保存在server的那部分文件大小（也就是偏移量）
int transFileAgain(int netfd,int fileSize,char *filename){

    //1.打开我们需要传输的文件：
    int fd=open(filename,O_RDONLY);
    ERROR_CHECK(fd,-1,"open");

    //2.根据fileSize的大小进行文件读位置的偏移：
    off_t newPositon=lseek(fd,fileSize,SEEK_SET);

    //3.传输文件：
    sendFile();

}

//这是client端执行puts指令的部分代码：
else if(strncmp("puts",cmd,4)==0){
    TLVtrain_t tlv;
    bzero(&tlv,sizeof(tlv));
    tlv.type = PUTS ;
    strcpy(tlv.data,cmdfix);
    tlv.length = strlen(cmdfix);
    send(netFd,&tlv.type,sizeof(tlv.type),MSG_NOSIGNAL);
    send(netFd,&tlv.length,sizeof(tlv.length),MSG_NOSIGNAL);
    send(netFd,tlv.data,tlv.length,MSG_NOSIGNAL);

    //我们要在这里收到server端的确认信息，好告诉client是该断点续传还是正常传输
    //规定:客户端发的train.length == 0 代表client 要正常传输；
    //     发送非零值（也就是server保存的文件大小）代表server已经接受到的文件大小
    bzero(&train,sizeof(train));
    recvn(netFd,&train.length,sizeof(train.length));

    if(train.length == 0){
        //正常传输：
        sendFile();
    }
    else {
        //断点续传
        trainsFileAgain();

    }



    sendFile(netFd,cmdfix);
}



